// 传统面向对象
// 类是对象的属性和方法模板,是一个抽象概念
// class Dog{
//     // 构造函数
//     constructor(type,color){
//         this.type =type;
//         this.color=color;
//     }
//  *   makeSound(){
//         console.log('汪汪汪');
//     }
//     eat(){
//         console.log('骨头');
//     }
// }
// js原型式的面向对象
// 构造函数
function Dog(type,color){
    this.type =type;
    this.color=color;
    this.makeSound
} 
// 任何函数都有一个prototype对象
// Dog.prototype 跟 xb smy 有啥关系？
// 共同的实例，共享的办法
Dog.prototype = {
    makeSound:function(){
    console.log(`${this.type} 汪汪汪`);
    },
    eat : function(){
    console.log('骨头');
    }
}



// 构造函数（属性），原型对象（方法），实例
// 1.把构造函数运行了一下
// 2.以new的方式运行，内部this指向生成的对象

const xb = new Dog('土狗','白色');
const smy = new Dog('萨摩耶','白色');
console.log(xb.type);
console.log(xb instanceof Dog);
console.log(xb.__proto__.constructor);
// 私有属性 
// 任何实例对象都有一个__proto__,指向构造函数的prototype对象
console.log(xb.__proto__,'----------');
// xb 和 Dog.prototype 之间有点关系
// xb构造器有没有相应的属性，可以去原型对象（prototype）上去找
// xb.prototype.makeSound();
xb.makeSound();
// 相同的地方
console.log(xb.constructor==smy.constructor);
